# -*- coding: utf-8 -*-
"""
Created on Sat Aug 19 21:07:23 2023

@author: skunk69
"""

import json

chinese_name = u'独处行为量表'
english_name = 'Solitude Behavior Scale'
abbreviation = 'SBS'
category = u'行为方式量表'

outline = u"""独处是人类常见的一种行为，但引起这种行为的动机可能不尽相同。人格心理学家Burger对喜欢独处的人有过这样的描述，他也许是个内向的人，独处只是他的天性；也许他有社交恐惧，因此在可能的时候，他会选择逃避社会接触以减轻焦虑；他是个孤独型的人，由于缺乏一些基本的社会技巧，与人交往和发展人际关系存在困难所以选择了独处。马斯洛的理论则提供了另外一种解释，很可能他不是一个内向者，没有社会焦虑，也不是一个孤独型的人，这种独处的偏好，既反映了他的成长和发展，同时也为他的成长和发展做出了贡献。由此可见，外显行为表现为“独处”的个体，其内在的动机可能存在着很大的差异。
《独处行为量表》由陈小莉和戴晓阳于2012年编写。他们总结了前人有关独处的研究以及相关理论，认为独处是一种内在的人格特质，它是个体在意识清晰的状态下，处于一种与他人没有信息和情感交流的状态，并在此基础上，他们提出了积极独处（positive solitude）这一概念。积极独处是一种人格特质，指个体在拥有良好的人际交往的同时，也喜欢为自己保留一些时间独处的行为倾向。积极独处代表了马斯洛所提出的自我实现者的独处心理特征。
他们认为独处行为至少可以包括四种由不同动机或原因导致的行为类型，包括积极独处、孤僻（seclusiveness）、社交回避（social avoidance）和孤独（loneliness）。这些孤独行为对于个体的心理学意义显然是不同的，积极独处对于个体的心理发展具有积极的作用，而后三者多数时候可能反映了个体心理特征的消极方面。"""

instruction = u"""下面是对人们一些感受的描述，在最符合你情况的答案处进行选择。"""

with open('SBS.txt','r',encoding='utf-8') as f:
    lines = f.readlines()
    f.close()

items = {}
for key,line in enumerate(lines):
    _,value = line.strip().split('）',maxsplit=1)
    items[key+1] = value

reverse_items = [5,29]
scales = [u'积极独处',u'孤僻',u'社交焦虑',u'孤独']
scales_items = [
    [1,9,10,12,18,19,20,30,31,32],# 积极独处
    [3,4,11,13,14,16,17,24,25],# 孤僻
    [2,5,26,27,28,29,34],# 社交焦虑
    [6,7,8,15,21,22,23,33],# 孤独    
    ]

# check scales_items
print(f'scale length={[len(l) for l in scales_items]}')

check = []
for l in scales_items:
    check = check+l
print(f'len(check)={len(check)}')

# complementary set
check_set = {i for i in sorted(check)}^{i for i in range(1,35)}
print(f'complementary set= {check_set}')

factors = []
factors_scales = []
rating = [u'非常不同意',u'有些不同意',u'不确定',u'有些同意',u'非常同意']
score_rules = list(range(1,6))

contents = {
    'instruction':instruction,
    'items':items,
    'reverse_items':reverse_items,
    'scales':scales,
    'scales_items':scales_items,
    'factors':factors,
    'factors_scales':factors_scales,
    'rating':rating,
    'score_rules':score_rules       
    }

implementation = u"""《独处行为量表》属于一个自评量表。"""

reliability = u"""学生样本包括大学生和高中生两个样本。项目分析结果表明，独处行为量表的绝大部分条目的鉴别指数在0.3以上，仅两个条目在0.25~0.30，平均鉴别指数在0.413，平均题总净相关为0.522。
对两个样本四个分量表的内部一致性Cronbach α系数均在0.75以上。间隔四周重测信度系数在0.654（积极独处）~0.760（社交回避）。"""
validity = u"""在结构效度方面，对大学生样本进行探索性因素分析，结果显示，4个因子可以解释总体方差的44.25%，除了三个条目的因子负荷在0.3水平外，其余条目的因子负荷在0.4~0.7，条目没有跨因子负荷现象。采用验证性因素分析方法对高中生样本进行分析，结果显示独处行为量表的结构在高中生群体中具有较好的稳定性。
同时还实施了社交回避与苦恼量表和UCLA孤独量表。独处行为量表中的孤僻分量表与社交回避与苦恼量表呈低度正相关，社交回避分量表与社交回避与苦恼量表的相关性分别为0.577和0.821。孤独分量表与社交回避与苦恼量表的相关性为0.348，与UCLA孤独量表的相关性为0.526。积极独处与以上两个量表的相关均不显著。采用独处行为量表和简易自我实现量表对大学生样本施测，结果显示，积极独处与自我实现呈正相关（r=0.36），而其他三个分量表呈负相关（-0.335~-0.431）。
实证效度方面，研究一为高层管理人员、优秀学生和普通学生的比较，结果显示，高层管理人员在积极独处分量表上的得分显著高于优秀大学生，后者又显著高于普通学生。在孤僻分量表上，恰恰相反。在社交回避和孤独分量表上，高层管理人员显著高于优秀的学生和普通学生。研究二为精神分裂症病人和普通正常人样本。结果显示，普通人群在积极独处分量表上的得分显著高于病人组，病人在孤僻和孤独两个维度上显著高于普通人群。"""
measurements = {'reliability':reliability,'validity':validity}

interpretation = u"""各分量表的释义如下：
（1）积极独处，是一种人格特征或心理品质，指个体在拥有良好的人际交往的同时，也喜欢为自己保留一些时间独处。通常这类人选择独处时，伴有一些积极的目标或情感体验，比如独处时能帮助个体更好地利用时间、自我反省、提高工作效率、激发创造力等。
（2）孤僻（seclusiveness），也是一种人格特征或心理品质，具有明显这种特征的个体常不能与他人保持正常关系，倾向于离群索居。通常他们喜欢独自一个人待着，他们的独处行为既可能是个体主动选择，也可能是被动的。但他们的独处行为常不具有明确的目的，也不一定伴有积极的情感体验。
（3）社交回避（social avoidance），指个体害怕或恐惧社交场合，社交焦虑是导致社交回避的原因。为了减轻这种焦虑而选择回避进入社交情境，他们宁可自己独自待着。个体选择独处常常是被动的，其体验是消极的。
（4）孤独（loneliness），是一种主观感受。孤独感是指个体在社会关系网络不足时的不快乐体验，包括社会关系在数量上的不足和质量上的低下，这些人并非主动选择独处，独处对其是一种消极的心理体验。
将各维度题目相加得到各维度分，所有34个条目得分之和即为该量表的总分。"""

applications = u"""戴晓阳和刘佳培研究了高中学生的依恋类型与独处行为的关系，他们发现安全依恋型学生表现为积极独处得分最高。
鲍莉和戴晓阳研究了积极独处对学生高考成绩的影响，结果显示积极独处得分高对高考语文、英语和数学成绩都有正向预测作用，社交回避对数学成绩也有正向预测作用，而孤僻对英语成绩有负向预测作用。"""

this_scale = {
    'chinese_name':chinese_name,
    'english_name':english_name,
    'abbreviation':abbreviation,
    'category':category,
    'outline':outline,
    'contents':contents,
    'implementation':implementation,
    'measurements':measurements,
    'interpretation':interpretation,
    'applications':applications    
    }

with open(abbreviation+'.json','w+',encoding='utf-8') as f:
    json.dump(this_scale,f,indent=2,ensure_ascii=False)